Problem statement: zenit12kkb
B: Telefónny zoznam |
20 bodov | Časový limit: 100 ms |
Po príchode na krajské kolo sa Lukáš musel registrovať pri veľkom stole plnom papierov a neporiadku.
Všetci pobehovali okolo a riešili problémy. Napríklad jedna organizátorka chcela vytlačiť
zoznam telefónnych čísel všetkých zúčastnených. Pritom ale nariekala, že sa míňa v tlačiarni
toner a to ešte nie sú vytlačené ani potvrdenia o bezinfekčnosti.
Keď to Lukáš videl, tak sa v ňom prebudil optimalizátor - niekedy sa pri tlačení zoznamu predsa dá niečo ušetriť!
Napríklad namiesto
4513
4523
4524
4524
4777
5777
by stačilo vytlačiť iba
4513
23
4
777
5777
Postupujeme zľava doprava a ak sa daná cifra zhoduje s cifrou nad ňou, potom ju môžeme vynechať.
Ak sa cifry nezhodujú, potom s optimalizáciou v danom riadku končíme. Všimnite si, že vo výslednom zozname môže
chýbať aj niekoľko cifier v stĺpci za sebou. Vtedy platí, že sú všetky zhodné s cifrou, ktorá je vytlačená nad nimi
(taká vždy existuje, keďže prvé číslo tlačíme vždy celé). V uvedenom prípade sme takto ušetrili 10 cifier.
Aby Lukáš dokázal prítomných organizátorov presvedčiť, rád by vedel pre daný zoznam čísel, koľko symbolov
sa ušetrí. Napíšte mu program, ktorý mu umožní presadiť svoje riešenie!
Na vstupe je na prvom riadku počet telefónnych čísel N (1 ≤ N ≤ 10,000) a na každom z ďalších N riadkov reťazec cifier 0 až 9.
Môžete predpokladať, že všetky čísla sú rovnako dlhé. Ich dĺžka je aspoň 1 a nepresahuje 50 (môžu sa začínať aj nulou).
Iné znaky ako cifry 0 až 9 sa na vstupe nevyskytnú. Na výstup vypíšte jedno číslo: počet ušetrených cifier pri použití Lukášovho algoritmu.
Poradie čísel v zozname nemôžete meniť. Hint: odporúčame reťazce na vstupe čítať ako typ
string a nie ako čísla.
>
Príklady:
| |
6
4513
4523
4524
4524
4777
5777
|
| |
| |
10
134567432541243980
024343214565619981
024343214565771334
024343214565771335
024343214565771335
124343214565771335
124343224565771335
124343224565778456
124343225445643134
123434324668454313
|
| |